Git 基本操作

作者: 李多多 日期: 2019-09-24
Git
Git 基本操作

Git概念

image.png

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git 与 SVN 区别

Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。

如果你是一个具有使用 SVN 背景的人,你需要做一定的思想转换,来适应 Git 提供的一些概念和特征。

Git 与 SVN 区别点:

  1. Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 SVN,CVS 等,最核心的区别。

  2. Git 把内容按元数据方式存储,而 SVN 是按文件:所有的资源控制系统都是把文件的元信息隐藏在一个类似 .svn、.cvs 等的文件夹里。

  3. Git 分支和 SVN 的分支不同:分支在 SVN 中一点都不特别,其实它就是版本库中的另外一个目录。

  4. Git 没有一个全局的版本号,而 SVN 有:目前为止这是跟 SVN 相比 Git 缺少的最大的一个特征。

image.png

工作区和暂存区

  1. 工作区就是我们能看到的工作目录,就是本地的文件夹。
  2. 这些本地的文件夹我们要通过git add命令先将他们添加到暂存区中。
  3. git commit命令则可以将暂存区中的文件提交到本地仓库中去。

基本操作

初始化仓库

仓库的初始化有两种方式:一种是直接从远程仓库克隆,另一种则是直接从当前目录初始化,这里我们主要介绍当前目录初始化,远程仓库克隆我们在后面的文章中会说到。从当前目录初始化的方式很简单,直接执行如下命令:

$ git init

执行完成后当前目录下会多出一个.git的隐藏文件夹,所有git需要的数据和资源都存放在该目录中。

查看仓库状态

git status 命令来查看仓库中文件的状态,如下:

image.png

结果显示我们当前处于master分支下,然后显示暂时没有东西可以提交,因为当前仓库中还没有记录任何文件的任何状态。此时,我在当前目录下创建一个名为test.txt的文件,然后再执行 git status ,如下:

image.png

此时结果中显示有一个文件就是我刚刚添加的test.txt,这个表示该文件目前并未被git仓库所管理,所以接下来我们要将这个文件添加到暂存区。

添加文件到暂存区

使用git add 可以将一个文件添加到暂存区。添加完后,再执行 git status查看结果,文件已经提交到了暂存区。如下:
image.png

提交到本地仓库

当文件提交到暂存区之后,此时我们可以使用 git commit 命令将当前暂存区的文件提交到本地仓库,如下:

image.png

-m参数是添加的备注,提交成功之后,我们再执行git status命令,结果如下:

image.png

结果显示没有需要add的东西,也没有需要commit的东西。

查看提交日志

git log 查看以往仓库中提交的日志,比如提交的版本号、提交者、提交者邮箱、提交时间、提交备注等信息。

$ git log

$ git log --pretty=short #显示简略的信息

$ git log test.txt #如果只想查看某一个文件的提交日志,在git log后面加上文件名即可。

$ git log -p test.txt #如果我还想查看提交时文件的变化,加上-p参数即可(绿色的+表示新增的行,红色的-表示删除的行)
$ git reflog # 用户重返回来,查看确定的版本,查看命令记录,以及对应的版本号

查看更改前后的差异

$ git diff

git diff 命令显示已写入缓存与已修改但尚未写入缓存的改动的区别。git diff 有两个主要的应用场景。

  • 尚未缓存的改动:git diff
  • 查看已缓存的改动: git diff –cached
  • 查看已缓存的与未缓存的所有改动:git diff HEAD
  • 显示摘要而非整个 diff:git diff –stat

继续看例子,执行 git diff 命令我们可以查看工作区和暂存区的区别以及工作区和最新提交的差别,在 test.txt 文件中再添加一行hello,此时执行git diff 命令,如下:

image.png

此时我再执行git add命令,将文件提交到暂存区,然后再执行git diff,如下:

image.png

此时工作区的内容和暂存区的内容已经保持一致了。但是此时工作区和本地仓库中最新提交的内容还是不一致,我们可以通过

git diff HEAD 来查看,如下:

image.png

此时我们需要执行git commit命令将暂存区中的文件提交,提交成功之后,就无区别。
image.png

删除文件

$git rm [文件名]     # 从缓存区删除文件(add中没有了)

$git rm [文件] # 删除文件,直接rm 文件,那么你还需要add到缓存区再进行提交。这个命令,执行了删除后.直接提交就是了.不用add

先说这么多吧……

其它文章:

Git 分支管理
git stash工作区储藏
Git 关联远程仓库GitHub
参考:https://git-scm.com/docs

https://www.runoob.com/git/git-basic-operations.html